import axios from "axios";
import router from "@/router/index.js";
import elementUI from "element-ui";

const service = axios.create({
  // baseURL: "/api",
  // 请求是否携带cookie
  withCredentials: true,
  // 延迟时间
  timeout: 1000 * 10,
});
export default service;

// 请求拦截
service.interceptors.request.use(function (config) {
  // 用一个数组设定好不需要拦截的请求
  let pathArr = ["/users/getCaptcha", "/users/login"];
  let flag = pathArr.some((item) => config.url === item);
  // console.log(config);
  if (flag) {
    // 如果包含了不需要拦截的请求，直接放行
    return config;
  } else {
    // 需要拦截的请求要携带 token 过去验证
    let token = localStorage.getItem("token");
    // 往请求头添加 token
    config.headers["authorization"] = token;
    // 然后放行
    return config;
  }
});

// 响应拦截
service.interceptors.response.use(function (config) {
  // 判断如果是验证码的响应则不用拦截
  // let reg = /^\/users\/verifyCaptcha.+/;
  let reg = /^(\/users\/verifyCaptcha|\/getloginlog).+/;
  let { url } = config.config;

  if (reg.test(url) || url === "/users/getCaptcha" || url === "/users/login") {
    return config;
  } else {
    let code = config.data.code;
    // 如果返回的状态码 10022 或者 1004 就代表非法进入或者 token 过期
    if (code === "10022" || code === "1004") {
      // 强制跳转到login组件
      router.push({ path: "/login" });

      // 清除token
      localStorage.removeItem("token");

      // 清除登录用户信息
      localStorage.removeItem("userInfo");

      // 弹出警告提示
      elementUI.Message.error("登录过期，请重新登录");
    } else {
      return config;
    }
  }
});
